package com.ysx.service.impl;

import com.itheima.health.pojo.OrderSetting;
import com.ysx.dao.OrderSettingDao;
import com.ysx.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Component
@Transactional
public class OrderSettingServiceImpl implements OrderSettingService {

//    注入dao层代理对象
    @Autowired
    private OrderSettingDao orderSettingDao;

    /**
     * 将excel文件内容上传数据库
     * @param list
     * @return
     */
    @Override
    public int upload(List<OrderSetting> list) {

//        定义执行次数
        int update=0;
        int add=0;
//        遍历list集合
        for (OrderSetting orderSetting : list) {
//            将每一个对象的日期取出来 调用方法 查询数据库 返回对象
            Date Date = orderSetting.getOrderDate();
            System.out.println("对象的日期:" + Date);
            OrderSetting DSObject=orderSettingDao.findObjectByDate(Date);
//            根据对象是否为null 有两种情况 1.更新  2.添加
            if(DSObject!=null){
                // 判断预编译的对象最大预约数 是否小于 数据库对象已经预约的数量
                if(orderSetting.getNumber()<DSObject.getReservations()){
                //抛出一个运行异常
                    throw new RuntimeException("数据库中已预约的数量大于可预约数量！！！");
                }else {
                //直接更新
                 update+=  orderSettingDao.updateOrderSetting(orderSetting);
                }
            }else {
                //如果数据库中没有查询到记录 就直接添加
                add+= orderSettingDao.addOrderSetting(orderSetting);
            }
        }
//        如果总执行次数=集合总个数 那么就返回1
       return (update+add==list.size())?1:0;
    }

    /**
     * 根据年月查询数据 返回集合对象
     * @param date
     * @return
     */
    @Override
    public List<OrderSetting> findOrderSettingByMonth(String date) {
//        设置起始条件
        String start = date + "-1";
//        设置终点条件
        String end = date + "-31";
//        调用service方法 传入两个参数
        List<OrderSetting> list=orderSettingDao.findOrderSettingByMonth(start,end);
        return list;
    }

    /**
     * 修改最大预约
     * @param date
     * @param number
     * @return
     */
    @Override
    public int updateV(String date, int number) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = simpleDateFormat.parse(date);
        System.out.println("字符串date:" + date);
        System.out.println("转换后的date:"+parse);
//        根据日期查询对应的对象
        OrderSetting objectByDate = orderSettingDao.findObjectByDate(parse);
        int reservations = objectByDate.getReservations();
//        如果数据库中的已预约数大于我们的预修改数 那么就报错
        if(reservations>number){
            throw new RuntimeException("已预约数大于预修改数");
        }else {
            //        调用dao层 返回执行结果
            return orderSettingDao.updateV(date,number);

        }

    }


}
